home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / lang / sofa.lha / sofa / smalleiffel / lib_std / output_stream.e < prev    next >
Text File  |  2000-03-25  |  5KB  |  233 lines

  1. -- This file is  free  software, which  comes  along  with  SmallEiffel. This
  2. -- software  is  distributed  in the hope that it will be useful, but WITHOUT 
  3. -- ANY  WARRANTY;  without  even  the  implied warranty of MERCHANTABILITY or
  4. -- FITNESS  FOR A PARTICULAR PURPOSE. You can modify it as you want, provided
  5. -- this header is kept unaltered, and a notification of the changes is added.
  6. -- You  are  allowed  to  redistribute  it and sell it, alone or as a part of 
  7. -- another product.
  8. --          Copyright (C) 1994-98 LORIA - UHP - CRIN - INRIA - FRANCE
  9. --            Dominique COLNET and Suzanne COLLIN - colnet@loria.fr 
  10. --                       http://SmallEiffel.loria.fr
  11. --
  12. deferred class OUTPUT_STREAM
  13.    --
  14.    -- This abstract class is the superclass of all classes representing 
  15.    -- an output stream of bytes. 
  16.    --
  17.  
  18. feature -- State of the stream :
  19.  
  20.    is_connected: BOOLEAN is
  21.       deferred
  22.       end;
  23.  
  24. feature -- To write one character at a time :
  25.  
  26.    put_character(c: CHARACTER) is
  27.       require
  28.          is_connected
  29.       deferred
  30.       end;
  31.  
  32. feature 
  33.  
  34.    put_string(s: STRING) is
  35.          -- Output `s' to current output device.
  36.       require
  37.          is_connected;
  38.          s /= Void
  39.       local
  40.          i: INTEGER;
  41.       do
  42.          from  
  43.             i := 1;
  44.          until
  45.             i > s.count
  46.          loop
  47.             put_character(s.item(i));
  48.             i := i + 1;
  49.          end;
  50.       end;
  51.    
  52.    putstring(s: STRING) is
  53.       obsolete "Please use ELKS 95 `put_string' instead."
  54.       do
  55.          put_string(s);
  56.       end;
  57.  
  58. feature -- To write a number :
  59.  
  60.    put_integer(i: INTEGER) is
  61.          -- Output `i' to current output device.
  62.       require
  63.          is_connected
  64.       do
  65.          tmp_string.clear;
  66.          i.append_in(tmp_string);
  67.          put_string(tmp_string);
  68.       end;
  69.    
  70.    put_integer_format(i, s: INTEGER) is
  71.          -- Output `i' to current output device using at most
  72.          -- `s' character.
  73.       require
  74.          is_connected
  75.       do
  76.          tmp_string.clear;
  77.          i.append_in_format(tmp_string,s);
  78.          put_string(tmp_string);
  79.       end;
  80.    
  81.    put_real(r: REAL) is
  82.          -- Output `r' to current output device.
  83.       require
  84.          is_connected
  85.       do
  86.          tmp_string.clear;
  87.          r.append_in(tmp_string);
  88.          put_string(tmp_string);
  89.       end;
  90.    
  91.    put_real_format(r: REAL; f: INTEGER) is
  92.          -- Output `r' with only `f' digit for the fractionnal part.
  93.          -- Examples: 
  94.          --    put_real(3.519,2) print "3.51".
  95.       require
  96.          is_connected;
  97.          f >= 0;
  98.       do
  99.          tmp_string.clear;
  100.          r.append_in_format(tmp_string,f);
  101.          put_string(tmp_string);
  102.       end;
  103.    
  104.    put_double(d: DOUBLE) is
  105.          -- Output `d' to current output device.
  106.       require
  107.          is_connected
  108.       do
  109.          tmp_string.clear;
  110.          d.append_in(tmp_string);
  111.          put_string(tmp_string);
  112.       end;
  113.    
  114.    put_double_format(d: DOUBLE; f: INTEGER) is
  115.          -- Output `d' with only `f' digit for the fractionnal part.
  116.          -- Examples: 
  117.          --    put_double(3.519,2) print "3.51". 
  118.       require
  119.          is_connected;
  120.          f >= 0
  121.       do
  122.          tmp_string.clear;
  123.          d.append_in_format(tmp_string,f);
  124.          put_string(tmp_string);
  125.       end;
  126.  
  127.    put_number(number: NUMBER) is
  128.          -- 
  129.       require
  130.          number /= Void
  131.       do
  132.          tmp_string.clear;
  133.          number.append_in(tmp_string);
  134.          put_string(tmp_string);
  135.       end;
  136.  
  137. feature -- Other features :   
  138.  
  139.    put_boolean(b: BOOLEAN) is
  140.          -- Output `b' to current output device according
  141.          -- to the Eiffel format.
  142.       require
  143.          is_connected
  144.       do
  145.          if b then
  146.             put_string("true");
  147.          else
  148.             put_string("false");
  149.          end;
  150.       end;
  151.    
  152.    put_pointer(p: POINTER) is
  153.          -- Output a viewable version of `p'.
  154.       require
  155.          is_connected
  156.       do
  157.          tmp_string.clear;
  158.          p.append_in(tmp_string);
  159.          put_string(tmp_string);
  160.       end;
  161.  
  162.    put_new_line is
  163.          -- Output a newline character.
  164.       require
  165.          is_connected
  166.       do
  167.          put_character('%N');
  168.       end;
  169.    
  170.    put_spaces(nb: INTEGER) is
  171.       -- Output `nb' spaces character.
  172.       require
  173.          nb >= 0
  174.       local
  175.          count : INTEGER;
  176.       do
  177.          from  
  178.          until
  179.             count >= nb
  180.          loop
  181.             put_character(' ');
  182.             count := count + 1;
  183.          end;
  184.       end; 
  185.    
  186.    append_file(file_name: STRING) is
  187.       require
  188.          is_connected;
  189.          file_exists(file_name);
  190.       local
  191.          c: CHARACTER;
  192.       do
  193.          tmp_file_read.connect_to(file_name);
  194.          from  
  195.             tmp_file_read.read_character;
  196.          until
  197.             tmp_file_read.end_of_input
  198.          loop
  199.             c := tmp_file_read.last_character;
  200.             put_character(c);
  201.             tmp_file_read.read_character;
  202.          end;
  203.          tmp_file_read.disconnect;
  204.       end;
  205.  
  206.    flush is
  207.       deferred
  208.       end;
  209.  
  210. feature {NONE}
  211.  
  212.    write_byte(stream_pointer: POINTER; byte: CHARACTER) is
  213.          -- Low level buffered output.
  214.       external "SmallEiffel"
  215.       end;
  216.  
  217.    flush_stream(stream_pointer: POINTER) is
  218.       external "SmallEiffel"
  219.       end;
  220.  
  221.    tmp_file_read: STD_FILE_READ is
  222.       once
  223.          !!Result.make;
  224.       end;
  225.    
  226.    tmp_string: STRING is
  227.       once
  228.          !!Result.make(512);
  229.       end;
  230.    
  231. end -- OUTPUT_STREAM
  232.  
  233.